import axios from 'axios';
import {ElMessage} from 'element-plus';

// 创建 axios 实例
const request = axios.create({
    timeout: 10000
})

// 请求拦截器
request.interceptors.request.use(
    config => {
        const token = localStorage.getItem('token')
        if (token) {
            config.headers['Authorization'] = 'Bearer ' + token
        }
        return config
    },
    error => {
        return Promise.reject(error)
    }
)

// 响应拦截器
request.interceptors.response.use(
    response => {
        const res = response.data;

        // 如果后端返回了 code 字段，且不等于 200，视为业务错误
        if (res.code !== undefined && res.code !== 200) {
            ElMessage({
                message: res.message || '操作失败',
                type: 'error',
                duration: 3000
            });
            return Promise.reject(res.message);
        }

        // 返回成功的数据（即 res.data）
        return response;
    },
    error => {
        // 处理 HTTP 状态码错误（如 404, 500, 网络断开等）
        let msg = '未知错误';
        if (error.response) {
            switch (error.response.status) {
                case 400:
                    msg = '请求参数错误';
                    break;
                case 401:
                    msg = '未授权，请登录';
                    break;
                case 403:
                    msg = '拒绝访问';
                    break;
                case 404:
                    msg = `请求地址出错: ${error.response.config.url}`;
                    break;
                case 500:
                    msg = '服务器内部错误';
                    break;
                case 502:
                    msg = '网关错误';
                    break;
                case 503:
                    msg = '服务不可用';
                    break;
                case 504:
                    msg = '网关超时';
                    break;
                default:
                    msg = error.response.data?.message || error.message;
            }
        } else if (error.request) {
            msg = '网络连接失败，请检查网络';
        } else {
            msg = error.message;
        }

        ElMessage({
            message: msg,
            type: 'error',
            duration: 3000
        });

        return Promise.reject(error);
    }
);

export default request;
